#pragma once

#include<iostream>
#include<semaphore.h>

class Sem
{
public:
    Sem(int init_num)
        :_init_num(init_num)
    { 
        sem_init(&_sem, 0, _init_num);
    }

    void P()
    {
        sem_wait(&_sem);
    }

    void V()
    {
        sem_post(&_sem);
    }

    ~Sem()
    {
        sem_destroy(&_sem);
    }

private:
    sem_t _sem;
    int _init_num;
};